﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web;
using CDStore3Tiers;

namespace CDStore3Tiers
{
    public class XuLyDatHang
    {
		/// <summary>
		/// Khởi tạo storeCDDataContextmới
		/// </summary>
        StoreCDDataContext db;

        /// <summary>
        /// update danh sach dat hàng
        /// </summary>
        /// <param name="dgv">DataGridView</param>

        public XuLyDatHang()
        {
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
        }
        public void UpdateDH(DataGridView dgv)
        {
            if (dgv.Rows.Count > 0)
            {
               
                XuLyForm XL = new XuLyForm();
                dgv.EndEdit();
                foreach (DataGridViewRow r in dgv.Rows)
                {
                    
                    int madh = int.Parse(r.Cells["cnameMaDH"].Value.ToString().Trim());
                    string tenkh = r.Cells["cnameTenKh"].Value.ToString().Trim();
                    string diachi = XL.CToString(r.Cells["cnameDiaChi"].Value);
                    int sdt = (Convert.ToInt32(r.Cells["cnameSDT"].Value));
                    DateTime ngaydh = Convert.ToDateTime(r.Cells["cnameNgayDH"].Value.ToString().Trim());
					DateTime ngayhen = Convert.ToDateTime(r.Cells["cnameNgayHen"].Value.ToString().Trim());
					decimal datcoc = (Convert.ToDecimal(r.Cells["cnameDatCoc"].Value));
                    
                    DatHang DH = db.DatHangs.Single(t => t.MaDH.Equals(madh));
                    DH.TenKH = tenkh;
                    DH.DiaChi = diachi;
                    DH.SoDT = (sdt);
                    DH.NgayDH = ngaydh;
					DH.NgayHen = ngayhen;
					DH.DatCoc = Convert.ToInt32( datcoc);
                    db.SubmitChanges();
                }
            }
        }
		/// <summary>
		/// Tìm danh sách đặt hàng
		/// </summary>
		/// <param name="DH">Danh sách đặt hàng</param>
		/// <param name="val">Giá trị nhập vào</param>
		/// <returns>Trả về danh sách đặt hàng được tìm kiếm thoe giá trị nhập vào</returns>
        public List<DatHang> SearchDH(List<DatHang> DH, string val)
        {
            val = val.ToLower();
            return DH.Where(c => c.MaDH.ToString().ToLower().Contains(val)||
                c.TenKH.ToString().ToLower().Contains(val) ||
                c.DiaChi.ToString().ToLower().Contains(val) ||
                c.SoDT.ToString().ToLower().Contains(val) ||
                c.NgayDH.ToShortDateString().ToLower().Contains(val)).ToList<DatHang>();
        }
		/// <summary>
		/// Lấy danh sách đặt hàng
		/// </summary>
		/// <returns>trả về danh sách đặt hàng</returns>
        /// 
        public decimal LayDatCoc_Ma(int ma)
        {
            decimal tong;
            DatHang dathang = new DatHang();
            dathang = (from dh in db.DatHangs
                    where dh.MaDH == ma
                    select dh).Single();
            tong = ConvertType.ToDecimal( dathang.DatCoc);
            return tong;
        }
		public List<DatHang> DSDatHang()
		{
			List<DatHang> listdh = new List<DatHang>();

			listdh = (from dh in db.DatHangs
					  select dh).ToList<DatHang>();
			return listdh;
		}
		/// <summary>
		/// Lấy mã đặt hàng
		/// </summary>
		/// <returns>mã đặt hàng</returns>
        public int LayID()
        {
           var a = (from n in db.DatHangs
             orderby n.MaDH descending
             select n.MaDH).First();
           return a;
        }
		/// <summary>
		/// kiểm tra xem đã thông tin đặt hàng trùng
		/// </summary>
		/// <param name="tenkh">tên khách hàng nhập vào</param>
		/// <param name="sdt">số điện thoại nhập vào</param>
		/// <param name="diachi">địa chỉ nhập vào</param>
		/// <param name="ngaydh">ngày đặt hàng nhập vào</param>
		/// <param name="ngayhen">ngày hẹn nhập vào</param>
		/// <returns>trả về biến giá trị đứng sai, t = 1 là đúng</returns>
		public int KiemTraTrung(string tenkh,int sdt, string diachi,DateTime ngaydh, DateTime? ngayhen)
		{
			int t = 0;
			foreach (var a in db.DatHangs)
			{
				if (a.TenKH == tenkh && a.SoDT == sdt && a.DiaChi == diachi && a.NgayDH == ngaydh && a.NgayHen == ngayhen)
				{
					t = 1;
				}
			}
			return t;
		}
		//public int GetMa()
		//{
		//	DataGridView dgv = new DataGridView();
		//	int madh = 0;
		//	if (dgv.SelectedRows.Count == 1)
		//	{
		//		foreach (DataGridViewRow r in dgv.SelectedRows)
		//		{
		//			madh = int.Parse(r.Cells["cnameMaDH"].Value.ToString().Trim());
		//		}
		//	}
		//	return madh;
		//}
		/// <summary>
		/// Hàm Lấy giá trị int
		/// </summary>
		/// <param name="r">Datagridviewrow</param>
		/// <param name="Name">tên của cột trong hàng</param>
		/// <returns>return giá trị của hàng r ở cột có tên là name ở kiểu int</returns>
		public static int GetInt(DataGridViewRow r, String Name)
		{
			return ConvertType.ToInt(GetObject(r, Name));
		}
		/// <summary>
		/// 
		/// </summary>
		/// <param name="r">datagridviewrow</param>
		/// <param name="Name">tên cua cột </param>
		/// <returns>return giá trị của cột có tên name ở hàng r </returns>
		public static object GetObject(DataGridViewRow r, String Name)
		{
			try
			{
				return r.Cells[Name].Value;
			}
			catch (Exception)
			{
				return "";
			}
		}
        // luong
		/// <summary>
		/// iểm tra xem hàng đã được giao hay chưa
		/// </summary>
		/// <param name="ma">giá trị truyền vào để so sánh</param>
		/// <returns>trả về true nếu đã giao, false nếu chưa giao</returns>
        public bool KiemTraGiaoHang(int ma)
        {
            bool kq = false;
            DatHang dathang = (from dh in db.DatHangs
                               where (dh.MaDH == ma)
                               select dh).Single();

            if (dathang.DaGiaoHang == true)
                kq = true;
            return kq;
        }
        //luong
		/// <summary>
		/// Cập nhật check vào ô đã giao hàng 
		/// </summary>
		/// <param name="ma">giá trị truyền vào để so sánh</param>
        public void CapNhatDaGiao_True(int ma)
        {
            DatHang dh = (from dathang in db.DatHangs
                          where (dathang.MaDH == ma)
                          select dathang).Single();
            db.DatHang_Update(dh.MaDH, dh.TenKH, dh.DiaChi, dh.SoDT, dh.NgayDH, dh.NgayHen, dh.DatCoc, true);
        }
        // luong
		/// <summary>
		/// Lấy danh sách đĩa đặt hàng
		/// </summary>
		/// <param name="ma">giá trị truyền vào để so sánh</param>
		/// <returns>trả về list danh sách đĩa đặt hàng </returns>
        public List<vw_CTDHNew> LayChiTietDatHang_Ma(int ma)
        {
            List<vw_CTDHNew> listdh = new List<vw_CTDHNew>();

            listdh = (from dh in db.vw_CTDHNews
                      where dh.MaDH == ma
                      select dh).ToList<vw_CTDHNew>();

            return listdh;
        }
        // luong
		/// <summary>
		/// Lấy giá trị ngày đặt hàng
		/// </summary>
		/// <returns>trả về giá trị ngày</returns>
        public DateTime LayNgayLapDatHang()
        {
            var a = (from n in db.DatHangs
                     orderby n.MaDH descending
                     select n.NgayDH).First();
            return a;
        }

        public int GetLastDH()
        {
            var a = (from n in db.DatHangs
                     orderby n.MaDH descending
                     select n.MaDH).First();
            return a;
        }

        public int TongSoTrang(int pagesize)
        {
            var a = (from t in db.DatHangs
                     select t).Count();
            if (a % pagesize == 0)
            {
                a = (int)a / pagesize;
            }
            else
            {
                a = ((int)a / pagesize) + 1;
            }
            return a;
        }
        public int SoTrangHienTai(int pagenumber, int pagesize)
        {
            int a = pagenumber;
            if (a % pagesize == 0)
            {
                a = (int)a / pagesize;
            }
            else
            {
                a = ((int)a / pagesize) + 1;
            }
            return a + 1;
        }
    }
}
